﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace HCMUS_SearchService_Group2
{
    /////////////////////////////////////////////////
    /// \brief Lớp Chi tiết Dịch Vụ 
    /// \author Dương Văn Phong -   0912334.
    /// \details <h3>Cung cấp hàm Lấy danh sách thông tin chi tiết của dịch vụ theo mã </h3>
    ////////////////////////////////////////////////
    public class ServiceDetailDAO : ObjectDAO
    {
        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu danh sach tất cả chi tiết Menu của dịch vụ tương ứng
        /// \returns List<ObjectDTO>.
        /// \details <h3>Lấy danh sach tất cả chi tiết Menu</h3>
        /////////////////////////////////////////////////
        public static List<ObjectDTO> GetAllServiceDetailDTO()
        {
            List<CHITIETDICHVU> listSerDetail = new List<CHITIETDICHVU>();
            List<ObjectDTO> listObject = new List<ObjectDTO>();

            listSerDetail = (from info in DataConnectionHelper.Context.CHITIETDICHVUs
                             select info).ToList();

            foreach (var info in listSerDetail)
            {
                ServiceDetailDTO temp = new ServiceDetailDTO() { DetailId = info.MaChiTiet, DetailName = info.Ten, Price = (info.GiaTien == null) ? 0 : (int)info.GiaTien, Note = info.ChuThich };
                listObject.Add(temp);
            }
            return listObject;
        }

        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu danh sach tất cả chi tiết dữ liệu menu
        /// \returns List<ObjectDTO>.
        /// \details <h3>Lấy danh sach tất cả chi tiết dữ liệu menu</h3>
        /////////////////////////////////////////////////
        public static List<ObjectDTO> GetAllDetailDataDTO()
        {
            List<CHITIET_DULIEU> listDetailData = new List<CHITIET_DULIEU>();
            List<ObjectDTO> listObject = new List<ObjectDTO>();

            listDetailData = (from info in DataConnectionHelper.Context.CHITIET_DULIEUs
                              select info).ToList();

            foreach (var info in listDetailData)
            {
                DetailDataDTO temp = new DetailDataDTO() { DetailId = info.MaChiTiet, MaDuLieu = info.MaDuLieu };
                listObject.Add(temp);
            }
            return listObject;
        }

        /////////////////////////////////////////////////
        /// \brief Hàm lấy giá với đầu vào là List ContentDataDTO input
        /// \returns List<int>.
        /// \details <h3>Lấy tất cả giá với dữ liệu cho sẵn</h3>
        /////////////////////////////////////////////////
        public static List<int> GetPriceWithDataContent(List<ContentDataDTO> input)
        {
            List<int> price = new List<int>();
            List<int> lstMaDuLieu = new List<int>();
            foreach (ContentDataDTO data in input)
                lstMaDuLieu.Add(data.MaDuLieu);

            price = (from info in SearchHelper.ServiceDetails
                     join dd in SearchHelper.DetailDatas on info.DetailId equals dd.DetailId
                     where lstMaDuLieu.Contains(dd.MaDuLieu)
                     select info.Price).Distinct().ToList();
           
            return price;
        }

        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu danh sach Menu ứng với mã dữ liêu
        /// \returns List<ObjectDTO>.
        /// \details <h3>Lấy danh sach Menu ứng với mã dữ liêu.</h3>
        /////////////////////////////////////////////////
        public static List<ObjectDTO> getMenuInfo(int dataID)
        {
            List<ServiceDetailDTO> listSerDetail = new List<ServiceDetailDTO>();
            //List<DetailDataDTO> listData = new List<DetailDataDTO>();
            List<ObjectDTO> listMenuInfo = new List<ObjectDTO>();

            listSerDetail = (from info in SearchHelper.ServiceDetails
                             join dd in SearchHelper.DetailDatas on info.DetailId equals dd.DetailId
                             where dd.MaDuLieu == dataID
                             select info).ToList();

            foreach (var info in listSerDetail)
            {
                /*ServiceDetailDTO temp = new ServiceDetailDTO();
                temp.DetailId = info.CHITIETDICHVU.MaChiTiet;
                temp.DetailName = info.CHITIETDICHVU.Ten;
                temp.Price = info.CHITIETDICHVU.GiaTien;
                temp.Note = info.CHITIETDICHVU.ChuThich;*/
                listMenuInfo.Add(info);
            }
            return listMenuInfo;
        }
    }
}
